redis在3.2版本之后也提供了地理位置的能力,使用redis可以轻松实现查找附近的人
geoadd命令
该命令是添加地理位置信息,基本格式是:
geoadd key log lat member
选项 | 含义 |
---|---|
key | redis key |
log | 经度 |
lat | 纬度 |
member | 该位置名字 |
举个例子:我现在要添加福州的软件园的地理位置
首先我通过某歌地图搜索到软件园,右键地点,点击“这儿有什么”,就会弹出经纬度小卡片,如图:
拿到经纬度后,redis中执行:
geoadd fuzhou 119.270673 26.114479 software_park
要注意的是,某歌地图搜出来的坐标,纬度在前,经度在后,而redis命令是相反的
如果要一次添加多个位置,直接在后面追加经纬度和member即可
geodist命令
该命令是计算两个位置的距离,为了演示效果,我再添加一个位置
geoadd fuzhou 119.268645 26.110886 taxi_company
计算software_park
和taxi_company
两点之间的距离:
127.0.0.1:6379> geodist fuzhou software_park taxi_company
"447.8919"
默认单位是米,同时也支持其他单位:
- m:米
- km:公里
- mi:英里
- ft:英尺
直接将单位加在命令后面即可,如:
127.0.0.1:6379> geodist fuzhou software_park taxi_company km
"0.4479"
georadius命令
该命令是找出指定坐标点一定距离内的位置,基本格式是:
georadius key log lat radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
这条命令比较长,后半部分用“[]”包裹的参数都是可选参数,非必填,可以先不看
例如,找出“119.270673 26.114479” 附近1km和400m内的点:
127.0.0.1:6379> georadius fuzhou 119.270673 26.114479 1 km
1) "software_park"
2) "taxi_company"
127.0.0.1:6379> georadius fuzhou 119.270673 26.114479 400 m
1) "software_park"
后面可选参数主要是针对查询结果做一些处理:
参数 | 说明 |
---|---|
WITHCOORD | 返回目标位置的经纬度 |
WITHDIST | 返回与目标位置之间具体距离 |
ASC|DESC | 按距离排序,ASC是从近到远,DESC相反 |
WITHHASH | 返回目标位置的hash值 |
COUNT count | 指定返回数量 |
这些参数不一一演示,仅举其中三个例子:
127.0.0.1:6379> georadius fuzhou 119.270673 26.114479 1 km withcoord
1) 1) "software_park"
2) 1) "119.27067071199417114"
2) "26.11447802512430627"
2) 1) "taxi_company"
2) 1) "119.26864296197891235"
2) "26.11088632524153041"
127.0.0.1:6379> georadius fuzhou 119.270673 26.114479 1 km withdist
1) 1) "software_park"
2) "0.0003"
2) 1) "taxi_company"
2) "0.4481"
127.0.0.1:6379> georadius fuzhou 119.270673 26.114479 1 km count 1
1) "software_park"
到这里,相信你已经可以使用redis实现“查到附近的人”了
georadiusbymember命令
该命令同样是找出距离指定位置n米距离内的点位,与georadius的区别是:
georadius是指定坐标点来搜索,而georadiusbymember是指定member来搜索,
127.0.0.1:6379> georadiusbymember fuzhou software_park 500 m
1) "software_park"
2) "taxi_company"
geohash命令
该命令是计算某位置的hash值,基本格式如下:
geohash key member
例如:
127.0.0.1:6379> geohash fuzhou software_park
1) "wssud1frb50"
geopos命令
获取指定位置的坐标:
127.0.0.1:6379> geopos fuzhou software_park
1) 1) "119.27067071199417114"
2) "26.11447802512430627"